#ifndef CARTRIDGE_H
#define CARTRIDGE_H

#include "Mapper/mapper.h"
#include "Mapper/mapper_0.h"
#include "Mapper/mapper_1.h"
#include "Mapper/mapper_2.h"
#include "Mapper/mapper_3.h"
#include "Mapper/mapper_4.h"
#include "Mapper/mapper_66.h"
#include <QString>
#include <QtGlobal>

class Cartridge
{
public:
    quint8 rom_num;       // 程序指令块数量（1个16KB）
    quint8 vrom_num;      // 图案点阵块数量（1个8KB）
    quint8 *program_data; // 程序指令
    quint8 *vrom_data;    // 图案点阵
    QString game_title;   // 记录游戏名称，用于存档文件
    QByteArray md5_val;   // 记录游戏文件的MD5值，用于存档认证

    // 以下为Mapper信息
    quint8 mapper_id;    // 扩展信息（使用哪个Mapper）
    quint8 prg_ram_size; // 很少用，卡带自带的ram大小
    Mapper *mapper_ptr;  // Mapper指针

public:
    Cartridge();
    bool read_from_file(QString input_file);
    void reset();

    void CpuWrite(quint16 addr, quint8 data);
    quint8 CpuRead(quint16 addr);

    void PpuWrite(quint16 addr, quint8 data);
    quint8 PpuRead(quint16 addr);
};

#endif // CARTRIDGE_H
